C++学习(一八四)clang是什么,与LLVM关系 您所在的位置:网站首页 轻量级编译器 意义 C++学习(一八四)clang是什么,与LLVM关系

C++学习(一八四)clang是什么,与LLVM关系

2023-12-07 14:49| 来源: 网络整理| 查看: 265

Clang是一个C语言、C++、Objective-C、OpenCL、CUDA、RenderScript语言的轻量级编译器。源代码发布于BSD协议下。

Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。

Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。

LLVM项目的一个子项目,基于LLVM架构的C/C++/Objective-C编译器前端。

gcc/g++ 和 clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大公司都在往上靠,前景一片光明。

相比于GCC,Clang具有如下优点

    编译速度快:在某些平台上,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GGC快3倍)     占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右     模块化设计:Clang采用基于库的模块化设计,易于 IDE 集成及其他用途的重用     诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告     设计清晰简单,容易理解,易于扩展增强

Clang与LLVM关系

LLVM整体架构,前端用的是clang,广义的LLVM是指整个LLVM架构,一般狭义的LLVM指的是LLVM后端(包含代码优化和目标代码生成)。

源代码(c/c++)经过clang--> 中间代码(经过一系列的优化,优化用的是Pass) --> 机器码

clang: C语言编译器,类似于gcc  clang++: C++编译器,类似于g++。clang++只是clang的一个别名。  clang-format:按照固定的规范格式化C/C++代码,非常智能。文档请见:http://clang.llvm.org/docs/ClangFormat.html  clang-modernize:把按照C++98标准写的代码,转成C++11标准的。文档请见:http://clang.llvm.org/extra/ModernizerUsage.html  llvm-as:LLVM 汇编器  llvm-dis: LLVM 反汇编器  opt:LLVM 优化器  llc:LLVM 静态编译器  lli:LLVM的字节码执行器(某些平台下支持JIT)  llvm-link:LLVM的字节码链接器  llvm-ar:LLVM的静态库打包器,类似unix的ar。  llvm-nm:类似于unix的nm  llvm-ranlib:为 llvm-ar 打包的文件创建索引  llvm-prof:将 ‘llvmprof.out’ raw 数据格式化成人类可读的报告  llvm-ld :带有可装载的运行时优化支持的通用目标连接器  llvm-config:打印出配置时 LLVM 编译选项、库、等等  llvmc:一个通用的可定制的编译器驱动  llvm-diff:比较两个模块的结构  bugpoint:自动案例测试减速器  llvm-extract:从 LLVM 字节代码文件中解压出一个函数  llvm-bcanalyzer:字节代码分析器 (分析二进制编码本身,而不是它代表的程序)  FileCheck:灵活的文件验证器,广泛的被测试工具利用  tblgen:目标描述阅读器和生成器  lit:LLVM 集成测试器,用于运行测试

基于这个认知,我们可以认为 LLVM 包括了两个概念:一个广义的 LLVM 和一个狭义的 LLVM 。广义的 LLVM 指的是一个完整的 LLVM 编译器框架系统,包括了前端、优化器、后端、众多的库函数以及很多的模块;而狭义的 LLVM 则是聚焦于编译器后端功能的一系列模块和库,包括代码优化、代码生成、JIT 等。

下面大概讲一讲 LLVM 和 Clang 的关系。我们将它们对应于传统的编译器当中的几个独立的部分,这样能够更加方便明确的表述出它们之前的关系。

Clang LLVM

对应到这个图中,可以非常明确的找出它们的关系。整体的编译器架构就是 LLVM 架构;Clang 大致可以对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作;编译器的优化器和后端部分就是之前提到的 LLVM 后端,即狭义的 LLVM。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有